// Copyright 2013-2019 Dirk Lemstra <https://github.com/dlemstra/Magick.NET/>
//
// Licensed under the ImageMagick License (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
//
//   https://www.imagemagick.org/script/license.php
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing permissions and
// limitations under the License.
// <auto-generated/>

using System.Collections.Generic;

namespace ImageMagick
{
    [System.CodeDom.Compiler.GeneratedCode("Magick.NET.FileGenerator", "")]
    public sealed partial class Paths
    {
        /// <summary>
        /// Adds a new instance of the <see cref="PathArcAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="pathArcs">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths ArcAbs(params PathArc[] pathArcs)
        {
            _paths.Add(new PathArcAbs(pathArcs));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathArcAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="pathArcs">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths ArcAbs(IEnumerable<PathArc> pathArcs)
        {
            _paths.Add(new PathArcAbs(pathArcs));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathArcRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="pathArcs">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths ArcRel(params PathArc[] pathArcs)
        {
            _paths.Add(new PathArcRel(pathArcs));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathArcRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="pathArcs">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths ArcRel(IEnumerable<PathArc> pathArcs)
        {
            _paths.Add(new PathArcRel(pathArcs));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathClose" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths Close()
        {
            _paths.Add(new PathClose());
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPointStart">Coordinate of control point for curve beginning</param>
        /// <param name="controlPointEnd">Coordinate of control point for curve ending</param>
        /// <param name="end">Coordinate of the end of the curve</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths CurveToAbs(PointD controlPointStart, PointD controlPointEnd, PointD end)
        {
            _paths.Add(new PathCurveToAbs(controlPointStart, controlPointEnd, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point for curve beginning</param>
        /// <param name="y1">Y coordinate of control point for curve beginning</param>
        /// <param name="x2">X coordinate of control point for curve ending</param>
        /// <param name="y2">Y coordinate of control point for curve ending</param>
        /// <param name="x">X coordinate of the end of the curve</param>
        /// <param name="y">Y coordinate of the end of the curve</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths CurveToAbs(double x1, double y1, double x2, double y2, double x, double y)
        {
            _paths.Add(new PathCurveToAbs(x1, y1, x2, y2, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPointStart">Coordinate of control point for curve beginning</param>
        /// <param name="controlPointEnd">Coordinate of control point for curve ending</param>
        /// <param name="end">Coordinate of the end of the curve</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths CurveToRel(PointD controlPointStart, PointD controlPointEnd, PointD end)
        {
            _paths.Add(new PathCurveToRel(controlPointStart, controlPointEnd, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point for curve beginning</param>
        /// <param name="y1">Y coordinate of control point for curve beginning</param>
        /// <param name="x2">X coordinate of control point for curve ending</param>
        /// <param name="y2">Y coordinate of control point for curve ending</param>
        /// <param name="x">X coordinate of the end of the curve</param>
        /// <param name="y">Y coordinate of the end of the curve</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths CurveToRel(double x1, double y1, double x2, double y2, double x, double y)
        {
            _paths.Add(new PathCurveToRel(x1, y1, x2, y2, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToAbs(params PointD[] coordinates)
        {
            _paths.Add(new PathLineToAbs(coordinates));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToAbs(IEnumerable<PointD> coordinates)
        {
            _paths.Add(new PathLineToAbs(coordinates));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToAbs(double x, double y)
        {
            _paths.Add(new PathLineToAbs(x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToHorizontalAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToHorizontalAbs(double x)
        {
            _paths.Add(new PathLineToHorizontalAbs(x));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToHorizontalRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToHorizontalRel(double x)
        {
            _paths.Add(new PathLineToHorizontalRel(x));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToRel(params PointD[] coordinates)
        {
            _paths.Add(new PathLineToRel(coordinates));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinates">The coordinates to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToRel(IEnumerable<PointD> coordinates)
        {
            _paths.Add(new PathLineToRel(coordinates));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToRel(double x, double y)
        {
            _paths.Add(new PathLineToRel(x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToVerticalAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToVerticalAbs(double y)
        {
            _paths.Add(new PathLineToVerticalAbs(y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathLineToVerticalRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths LineToVerticalRel(double y)
        {
            _paths.Add(new PathLineToVerticalRel(y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathMoveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinate">The coordinate to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths MoveToAbs(PointD coordinate)
        {
            _paths.Add(new PathMoveToAbs(coordinate));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathMoveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths MoveToAbs(double x, double y)
        {
            _paths.Add(new PathMoveToAbs(x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathMoveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="coordinate">The coordinate to use.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths MoveToRel(PointD coordinate)
        {
            _paths.Add(new PathMoveToRel(coordinate));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathMoveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">The X coordinate.</param>
        /// <param name="y">The Y coordinate.</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths MoveToRel(double x, double y)
        {
            _paths.Add(new PathMoveToRel(x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathQuadraticCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of control point</param>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths QuadraticCurveToAbs(PointD controlPoint, PointD end)
        {
            _paths.Add(new PathQuadraticCurveToAbs(controlPoint, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathQuadraticCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point</param>
        /// <param name="y1">Y coordinate of control point</param>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths QuadraticCurveToAbs(double x1, double y1, double x, double y)
        {
            _paths.Add(new PathQuadraticCurveToAbs(x1, y1, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathQuadraticCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of control point</param>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths QuadraticCurveToRel(PointD controlPoint, PointD end)
        {
            _paths.Add(new PathQuadraticCurveToRel(controlPoint, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathQuadraticCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x1">X coordinate of control point</param>
        /// <param name="y1">Y coordinate of control point</param>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths QuadraticCurveToRel(double x1, double y1, double x, double y)
        {
            _paths.Add(new PathQuadraticCurveToRel(x1, y1, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of second point</param>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothCurveToAbs(PointD controlPoint, PointD end)
        {
            _paths.Add(new PathSmoothCurveToAbs(controlPoint, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x2">X coordinate of second point</param>
        /// <param name="y2">Y coordinate of second point</param>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothCurveToAbs(double x2, double y2, double x, double y)
        {
            _paths.Add(new PathSmoothCurveToAbs(x2, y2, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="controlPoint">Coordinate of second point</param>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothCurveToRel(PointD controlPoint, PointD end)
        {
            _paths.Add(new PathSmoothCurveToRel(controlPoint, end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x2">X coordinate of second point</param>
        /// <param name="y2">Y coordinate of second point</param>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothCurveToRel(double x2, double y2, double x, double y)
        {
            _paths.Add(new PathSmoothCurveToRel(x2, y2, x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothQuadraticCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothQuadraticCurveToAbs(PointD end)
        {
            _paths.Add(new PathSmoothQuadraticCurveToAbs(end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothQuadraticCurveToAbs" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothQuadraticCurveToAbs(double x, double y)
        {
            _paths.Add(new PathSmoothQuadraticCurveToAbs(x, y));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothQuadraticCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="end">Coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothQuadraticCurveToRel(PointD end)
        {
            _paths.Add(new PathSmoothQuadraticCurveToRel(end));
            return this;
        }

        /// <summary>
        /// Adds a new instance of the <see cref="PathSmoothQuadraticCurveToRel" /> class to the <see cref="Paths" />.
        /// </summary>
        /// <param name="x">X coordinate of final point</param>
        /// <param name="y">Y coordinate of final point</param>
        /// <returns>The <see cref="Paths" /> instance.</returns>
        public Paths SmoothQuadraticCurveToRel(double x, double y)
        {
            _paths.Add(new PathSmoothQuadraticCurveToRel(x, y));
            return this;
        }

    }
}
